package com.cjl.demo;

/**
 * <p>Copyright: All Rights Reserved</p>
 * <p>Description: </p>
 *
 * @ uthor chenjinliang
 * @ date: 2019/8/6
 */
public class JMM {
    /**
     * 处理器代码乱序执行优化
     * @return
     */
    public int multiply(){
        int a = 10;
        int b =200;
        int result = a* b;
        return result;
    }

    /**
     * jdk1.5之前，线程B读到的变量x的值可能是0，也可能是42，jdk1.5之后，变量x的值就是42了。
     * 原因是jdk1.5中，对volatile的语义进行了增强。
     */
    public class VolatileExample {
        int x = 0 ;
        volatile boolean v = false;
        public void writer(){
            x = 42;
            v = true;
        }

        public void reader(){
            if (v == true){
                //
            }
        }
    }

    int a = 10;//1
    int b =1;//2
    int c = a + b; //3


}


//class Volatile Example01{
//    int a=0;
//    volatile boolean flag=false;
//    public void writer(){
//        a=1;            //1
//        flag=true;      //2
//    }
//    public void reader(){
//        if(flag){       //3
//            int i=a;    //4
////						……
//        }
//    }
//}